package edu.disenio.atencion.medica;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import edu.disenio.atencion.medica.zonas.ComparadorDeZonas;

public class Ambulancia implements Prestador{

	private Collection<Medico> prestadores = new ArrayList<Medico>();
	private List<Pedido> pedidos = new ArrayList<Pedido>();
	private ComparadorDeZonas comparadorDeZonas;
	
	
	public void subirPrestador(Medico medico) {
		this.prestadores.add(medico);
	}

	@Override
	public Boolean podesAtender(Pedido unPedido) {
		if(! estaEnLaZonaDe(unPedido)){
			return false;
		}
		
		for (Medico unMedico : this.prestadores) {
			if(unMedico.podesAtender(unPedido)){
				return true;
			}
		}
		return false;
	}

	private Boolean estaEnLaZonaDe(Pedido pedido) {
		return this.noHayPedidoEnAtencion() || estaEnLaMismaZona(pedido);
	}

	private boolean estaEnLaMismaZona(Pedido pedido) {
		return this.comparadorDeZonas.estanEnLaMismaZona(ultimoPedidoEnAtencion(),pedido);
	}

	public void setComparadorDeZonas(ComparadorDeZonas comparadorDeZonas) {
		this.comparadorDeZonas = comparadorDeZonas;
	}

	protected Boolean noHayPedidoEnAtencion() {
		return this.pedidos.isEmpty();
	}

	protected Pedido ultimoPedidoEnAtencion() {
		return this.pedidos.get(this.pedidos.size() -1 );
	}

	@Override
	public void atender(Pedido unPedido) {
		this.pedidos.add(unPedido);
	}

}
